package Z11_11_atomic;

import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.concurrent.atomic.AtomicReferenceFieldUpdater;

/**
 * @author： pang-yun
 * @date： 2021-11-11 17:07
 * 功能目的 ：用于  字段更新器   必须配合 volatile使用   保护对象 属性 赋值的原子性
 */

public class AtomicReferenceField {
    public static void main(String[] args) {
        Cat cat = new Cat();
        AtomicReferenceFieldUpdater updater = AtomicReferenceFieldUpdater.newUpdater(Cat.class,String.class,"name");

        System.out.println(updater.compareAndSet(cat, null, "purchase"));
        System.out.println(cat);
    }


}

@Data
@NoArgsConstructor
class Cat{
   volatile String name;

}